package lock.lock;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @Classname MustUnlock
 * @Description Lock不会像synchronized一样，异常的时候自动释放锁，所以最佳实践是，finally中释放锁，以便保证发生异常的时候锁一定被释放
 * @Date 2024/1/20 21:07
 * @Author zhuzhenguo
 */
public class MustUnlock {

    // 最典型的实现就是ReentrantLock
    private static Lock lock = new ReentrantLock();

    public static void main(String[] args) {
        lock.lock();
        // 拿到锁之后就要进行try，使用finally使代码变的可靠
        // 在用lock的时候，如论如何先将finally写好，再将unlock写好，再去补充业务逻辑
        try {
            //获取本锁保护的资源
            System.out.println(Thread.currentThread().getName() + "开始执行任务");
        } finally {
            lock.unlock();
        }
    }
}
